#!/usr/bin/python3
# -*- coding:utf-8 -*-
# __author__ == taoyulong2018@gmail.com
# __time__ == 2023/6/26 17:37
# ===========================================
#       题目名称： 55. 跳跃游戏
#       题目地址： https://leetcode.cn/problems/jump-game/
#       题目描述： https://note.youdao.com/s/LWYgPSzT
# ===========================================


class Solution:
    """
        给定一个非负整数数组 nums ，你最初位于数组的 第一个下标 。
    数组中的每个元素代表你在该位置可以跳跃的最大长度。
    判断你是否能够到达最后一个下标。
    """

    def canJump(self, nums):
        # 判断是否是空的元素
        if not nums:
            return False
        # 判断首位是否是0
        if nums[0] == 0:
            # 如果只有一条数据 则表示合规
            if len(nums) == 1:
                return True
            else:
                return False
        energy = nums[0]  # 能量
        is_to_end = True  # 是否到下一个
        for index in range(1, len(nums)):
            if nums[index] >= energy:
                energy = nums[index]
            else:
                energy -= 1
            # 能量消耗完 没到终点
            if energy <= 0 and index != len(nums) - 1:
                is_to_end = False
                break
        return is_to_end


if __name__ == '__main__':
    s = Solution()
    # True
    print("nums = [2,3,1,1,4] => ", s.canJump(nums=[2, 3, 1, 1, 4]))
    # False
    print("nums = [3,2,1,0,4] => ", s.canJump(nums=[3, 2, 1, 0, 4]))
    # True
    print("nums = [0] => ", s.canJump(nums=[0]))
    # True
    print("nums = [1,2] => ", s.canJump(nums=[1, 2]))
    # True
    print("nums = [1,1,1,0] => ", s.canJump(nums=[1, 1, 1, 0]))
